/*
 * Copyright (C) 2014 Realtek Semiconductor Corp.
 * All Rights Reserved.
 *
 * This program is the proprietary software of Realtek Semiconductor
 * Corporation and/or its licensors, and only be used, duplicated,
 * modified or distributed under the authorized license from Realtek.
 *
 * ANY USE OF THE SOFTWARE OTHER THAN AS AUTHORIZED UNDER
 * THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
 *
 * Purpose : Definition of ME handler: Extended ONU-G (65408)
 *
 * Feature : The file includes the following modules and sub-modules
 *           (1) ME handler: Extended ONU-G (65408)
 */

#include "app_basic.h"
#include "feature_mgmt.h"


MIB_TABLE_INFO_T                gMibExtOnugZTETblInfo;
MIB_ATTR_INFO_T                 gMibExtOnugZTEAttrInfo[MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_NUM];
MIB_TABLE_EXTENDED_ONU_G_ZTE_T  gMibExtOnugZTEDefRow;
MIB_TABLE_OPER_T                gMibExtOnugZTEOper;


static GOS_ERROR_CODE omci_mib_extended_onu_g_ZTE_reset(UINT32 args_num, ...)
{
    MIB_TABLE_EXTENDED_ONU_G_ZTE_T mibExtOnuGZTE;
    char                boaMibVal[OMCI_BOA_MIB_BUFFER_LEN];

    OMCI_LOG(OMCI_LOG_LEVEL_INFO, "Resetting MIB: Extended ONU-G ZTE");

    MIB_Default(MIB_TABLE_EXTENDED_ONU_G_ZTE_INDEX, &mibExtOnuGZTE, sizeof(MIB_TABLE_EXTENDED_ONU_G_ZTE_T));

    memset(boaMibVal, 0 , OMCI_BOA_MIB_BUFFER_LEN);
    if (GOS_OK == omci_get_boa_mib_value_by_name("GPON_ONU_MODEL", boaMibVal))
    {
        snprintf(mibExtOnuGZTE.Model, MIB_TABLE_EXTENDED_ONU_G_ZTE_MODEL_LEN+1, "%s", boaMibVal);
    }    
    GOS_ASSERT(GOS_OK == MIB_Set(MIB_TABLE_EXTENDED_ONU_G_ZTE_INDEX, &mibExtOnuGZTE, sizeof(MIB_TABLE_EXTENDED_ONU_G_ZTE_T)));
    OMCI_MeOperCfg(MIB_TABLE_EXTENDED_ONU_G_ZTE_INDEX, NULL, &mibExtOnuGZTE, MIB_ADD,
        omci_GetOltAccAttrSet(MIB_TABLE_EXTENDED_ONU_G_ZTE_INDEX, OMCI_ME_ATTR_ACCESS_SBC), OMCI_MSG_BASELINE_PRI_LOW);

    return GOS_OK;

}



GOS_ERROR_CODE extended_onu_g_ZTE_drv_cfg_handler(void              *pOldRow,
                                                  void            *pNewRow,
                                                  MIB_OPERA_TYPE  operationType,
                                                  MIB_ATTRS_SET   attrSet,
                                                  UINT32          pri)
{
    
    switch (operationType)
    {
        case MIB_SET:
            if (MIB_IsInAttrSet(&attrSet, MIB_TABLE_EXTENDED_ONU_G_ZTE_RESET_DEFAULT_INDEX))
            {
                // invoke reset default procedure
                omci_reset_onu_to_factory_default();                
            }
            break;

        default:
            break;
    }

    return GOS_OK;
}

GOS_ERROR_CODE mibTable_init(MIB_TABLE_INDEX tableId)
{
 
   MIB_ATTR_INDEX  attrIndex;
   UINT8 proprietary_mib_cb_bitmask = 0;
   UINT8 isIgnore = 0;
   
   if(GOS_OK == omci_ignore_mib_table_check(OMCI_ME_CLASS_EXTENDED_ONU_G_ZTE, OMCI_ME_CLASS_SUB_DEFAULT, &isIgnore))
   {
       if(isIgnore)
       {
           OMCI_PRINT("Ignore classId:%d", OMCI_ME_CLASS_OMCI);
           return GOS_FAIL;
       }
   
   }

    gMibExtOnugZTETblInfo.Name = "ExtendedOnuGZTE";
    gMibExtOnugZTETblInfo.ShortName = "EXTONUGZTE";
    gMibExtOnugZTETblInfo.Desc = "Extended ONU-G ZTE";
    gMibExtOnugZTETblInfo.ClassId = OMCI_ME_CLASS_EXTENDED_ONU_G_ZTE;
    gMibExtOnugZTETblInfo.InitType = OMCI_ME_INIT_TYPE_ONU;
    gMibExtOnugZTETblInfo.StdType = OMCI_ME_TYPE_PROPRIETARY;
    gMibExtOnugZTETblInfo.ActionType = OMCI_ME_ACTION_SET | OMCI_ME_ACTION_GET;
    gMibExtOnugZTETblInfo.pAttributes = &(gMibExtOnugZTEAttrInfo[0]);
    gMibExtOnugZTETblInfo.attrNum = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_NUM;
    gMibExtOnugZTETblInfo.entrySize = sizeof(MIB_TABLE_EXTENDED_ONU_G_ZTE_T);
    gMibExtOnugZTETblInfo.pDefaultRow = &gMibExtOnugZTEDefRow;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ENTITY_ID_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "EntityId";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Entity ID";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_HEX;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_READ | OMCI_ME_ATTR_ACCESS_SBC;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_1_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr1";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr1";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_2_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr2";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr2";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_VERSION_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Version";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Version";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_STR;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 14;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_CHAR;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_READ;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_4_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr4";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr4";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;
    
    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_5_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr5";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr5";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;
    
    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_6_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr6";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr6";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_7_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr7";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr7";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_8_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr8";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr8";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_9_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr9";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr9";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_10_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr10";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr10";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_11_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr11";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr11";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_12_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr12";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr12";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_13_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr13";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr13";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_14_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr14";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr14";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_ATTR_15_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "Attr15";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Attr15";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT16;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 2;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    attrIndex = MIB_TABLE_EXTENDED_ONU_G_ZTE_RESET_DEFAULT_INDEX - MIB_TABLE_FIRST_INDEX;
    gMibExtOnugZTEAttrInfo[attrIndex].Name = "ResetDefault";
    gMibExtOnugZTEAttrInfo[attrIndex].Desc = "Reset ONU to factory default config";
    gMibExtOnugZTEAttrInfo[attrIndex].DataType = MIB_ATTR_TYPE_UINT8;
    gMibExtOnugZTEAttrInfo[attrIndex].Len = 1;
    gMibExtOnugZTEAttrInfo[attrIndex].IsIndex = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].MibSave = TRUE;
    gMibExtOnugZTEAttrInfo[attrIndex].OutStyle = MIB_ATTR_OUT_DEC;
    gMibExtOnugZTEAttrInfo[attrIndex].OltAcc = OMCI_ME_ATTR_ACCESS_WRITE;
    gMibExtOnugZTEAttrInfo[attrIndex].AvcFlag = FALSE;
    gMibExtOnugZTEAttrInfo[attrIndex].OptionType = OMCI_ME_ATTR_TYPE_MANDATORY;

    memset(&gMibExtOnugZTEDefRow, 0x00, sizeof(gMibExtOnugZTEDefRow));
    snprintf(gMibExtOnugZTEDefRow.Model, MIB_TABLE_EXTENDED_ONU_G_ZTE_MODEL_LEN, "0");
    gMibExtOnugZTEDefRow.Model[MIB_TABLE_EXTENDED_ONU_G_ZTE_MODEL_LEN] = '\0';
    
    memset(&gMibExtOnugZTEOper, 0x0, sizeof(MIB_TABLE_OPER_T));
    gMibExtOnugZTEOper.meOperDrvCfg = extended_onu_g_ZTE_drv_cfg_handler;
    gMibExtOnugZTEOper.meOperConnCfg = NULL;
    gMibExtOnugZTEOper.meOperConnCheck = NULL;
    gMibExtOnugZTEOper.meOperDump = omci_mib_oper_dump_default_handler;
    gMibExtOnugZTEOper.meOperCb[PROPRIETARY_MIB_CB_RESET] = omci_mib_extended_onu_g_ZTE_reset;


    MIB_TABLE_EXTENDED_ONU_G_ZTE_INDEX = tableId;
    MIB_InfoRegister(tableId, &gMibExtOnugZTETblInfo, &gMibExtOnugZTEOper);

    proprietary_mib_cb_bitmask = (1 << PROPRIETARY_MIB_CB_RESET);
    MIB_Proprietary_Reg(tableId, proprietary_mib_cb_bitmask);


    return GOS_OK;
}
